home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (PO) / Nibble Volume 13, No. 02 (1992-02)(MindCraft Publishing)(Side A).zip / Nibble Volume 13, No. 02 (1992-02)(MindCraft Publishing)(Side A).po / SPEED.SEARCH.S < prev    next >
Text File  |  1996-12-24  |  4KB  |  129 lines

  1. * SPEED SEARCH
  2. * by C.B. Winkler
  3. *
  4. * Copyright (C) 1992 by
  5. * MindCraft Publishing Corp.
  6. *
  7. * MERLIN PRO ASSEMBLER
  8. *
  9. * A PROGRAM TO FIND A SPECIFIED STRING
  10. * WITHIN A STRING ARRAY
  11. *
  12. *
  13. AAEP      EQU $06        ;ADDRESS OF APPLESOFT ELEMENT POINTER
  14. EP        EQU $F9        ;DATA ELEMENT POINTER
  15. WP        EQU $FB        ;WORD POINTER
  16. RP        EQU $FD        ;RETURN ELEMENT POINTER
  17. AAWP      EQU WP         ;ADDRESS OF APPLESOFT WORD POINTER
  18. LW        EQU $FF        ;LENGTH OF WORD
  19. NETC      EQU $EB        ;NO. OF ELEMENTS TO CHECK
  20. NEC       EQU $ED        ;NO. OF ELEMENTS CHECKED
  21. NC        EQU $EF        ;NO. OF TIMES TO CHECK THIS ELEMENT 
  22. AANETC    EQU EP         ;ADDRESS OF APPLESOFT NETC 
  23. COMMA     EQU $DEBE      ;APPLESOFT ROUTINE TO FIND COMMA
  24. GETADD    EQU $DFE3      ;APPLESOFT ROUTINE TO GET VARIABLE ADDRESS
  25.           DEND
  26. *
  27.           ORG $300
  28. *
  29. * INITIALIZE
  30. *
  31.           JSR GETADD     ;GET AAWP
  32.           STA AAWP
  33.           STY AAWP+1
  34.           JSR COMMA      ;CHECK FOR COMMA
  35.           JSR GETADD     ;GET AAEP
  36.           STA AAEP
  37.           STY AAEP+1
  38.           JSR COMMA      ;CHECK FOR COMMA
  39.           JSR GETADD     ;GET RP
  40.           STA RP
  41.           STY RP+1
  42.           JSR COMMA      ;CHECK FOR COMMA
  43.           JSR GETADD     ;GET AANETC
  44.           STA AANETC
  45.           STY AANETC+1
  46.           LDY #$00       ;Y=0
  47.           LDA (AAWP),Y   ;GET LW
  48.           STA LW
  49.           STY NEC        ;INITIALIZE NEC
  50.           STY NEC+1      ;TO ZERO
  51.           LDA (AANETC),Y ;MOVE NETC TO
  52.           STA NETC       ;ZERO PAGE
  53.           INY            ;Y=1 
  54.           LDA (AANETC),Y
  55.           STA NETC+1
  56.           LDA (AAWP),Y   ;GET WP
  57.           PHA            ;LOW BYTE ON STACK
  58.           INY            ;Y=2
  59.           LDA (AAWP),Y
  60.           STA WP+1       ;HI BYTE TO ZERO PAGE
  61.           PLA            ;LOW BYTE FROM STACK
  62.           STA WP         ;AND TO ZERO PAGE
  63. *
  64. * INITIALIZATION DONE
  65. *
  66. INCNEC    INC NEC+1      ;INCREMENT NO. OF ELEMENTS CHECKED
  67.           BNE GETLE
  68.           INC NEC
  69. GETLE     LDY #$00       ;Y=0
  70.           LDA (AAEP),Y   ;GET LENGTH OF ELEMENT
  71.           SEC
  72.           SBC LW         ;A=LE-LW
  73.           BCC CHECKDONE  ;BRANCH IF WORD TOO LONG 
  74.           STA NC
  75.           INC NC         ;NC=LE-LW+1
  76.           INY            ;Y=1
  77.           LDA (AAEP),Y   ;INITIALIZE EP
  78.           STA EP
  79.           INY            ;Y=2
  80.           LDA (AAEP),Y
  81.           STA EP+1
  82. GO        LDY #$00       ;Y=0, START ELEMENT CHECKING ROUTINE
  83. CHECK     LDA (WP),Y     ;DOES CHARACTER OF WORD
  84.           CMP (EP),Y     ;MATCH CHARACTER OF ELEMENT
  85.           BEQ INCY       ;BRANCH IF YES
  86.           DEC NC         ;IF NO, DEC NC
  87.           BNE INCEP      ;BRANCH IF NOT DONE THIS ELEMENT
  88. CHECKDONE LDA NEC        ;DOES NEC=NETC
  89.           CMP NETC
  90.           BNE CONT       ;BRANCH IF NO
  91.           LDA NEC+1
  92.           CMP NETC+1
  93.           BNE CONT
  94.           LDA #$FF       ;ALL DONE CHECKING
  95.           LDY #$00       ;A=FF,Y=0 
  96.           STA (RP),Y     ;STORE -1(FF FF) IN RETURN ELEMENT
  97.           INY
  98.           STA (RP),Y
  99.           RTS            ;AND RETURN
  100. CONT      CLC            ;INC AAEP TO NEXT ELEMENT
  101.           LDA AAEP       ;BY ADDING 3
  102.           ADC #$03
  103.           STA AAEP
  104.           LDA AAEP+1
  105.           ADC #$00
  106.           STA AAEP+1
  107.           BNE INCNEC     ;UNCONDITIONAL BRANCH
  108. INCY      INY            ;Y=Y+1
  109.           CPY LW         ;Y=LW?
  110.           BNE CHECK      ;BRANCH AND CONTINUE CHECKING IF NO
  111.           LDY #$00       ;IF YES, THERE IS A MATCH 
  112.           LDA NEC        ;STORE NEC AT RP 
  113.           STA (RP),Y
  114.           INY
  115.           LDA NEC+1
  116.           STA (RP),Y
  117.           CLC            ;INC RP TO NEXT ELEMENT
  118.           LDA RP         ;BY ADDING 2
  119.           ADC #$02
  120.           STA RP
  121.           LDA RP+1
  122.           ADC #$00
  123.           STA RP+1
  124.           BNE CHECKDONE  ;UNCONDITIONAL BRANCH
  125. INCEP     INC EP         ;INC EP
  126.           BNE GO
  127.           INC EP+1
  128.           BNE GO         ;UNCONDITIONAL BRANCH
  129.